home *** CD-ROM | disk | FTP | other *** search
- unit Main;
-
- interface
-
- uses
- ComObj, ActiveX, AxDocs, Menus, ComCtrls, DAXDoc_TLB;
-
- type
- TDelphiAxDoc = class(TActiveXDocument, IDelphiAxDoc, IPersistStreamInit)
- private
- FItem: TMenuItem;
- FSubItem: TMenuItem;
- protected
- { IPersistStreamInit }
- function IPersistStreamInit.Load = PersistStreamLoad;
- function IPersistStreamInit.Save = PersistStreamSave;
- function IsDirty: HResult; stdcall;
- { Override TActiveXControl streaming mechanism to simply use memo lines }
- procedure LoadFromStream(const Stream: IStream); override;
- procedure SaveToStream(const Stream: IStream); override;
- public
- destructor Destroy; override;
- procedure DoMenuClick(Sender: TObject);
- procedure Initialize; override;
- end;
-
- implementation
-
- uses ComServ, StdCtrls, MainForm, AxCtrls, Windows, Dialogs;
-
- { TDelphiAxDoc }
-
- destructor TDelphiAxDoc.Destroy;
- begin
- inherited Destroy;
- FSubItem.Free;
- FItem.Free;
- end;
-
- procedure TDelphiAxDoc.DoMenuClick(Sender: TObject);
- begin
- with TColorDialog.Create(nil) do
- begin
- if Execute then (Control as TMemo).Color := Color;
- Free;
- end;
- end;
-
- procedure TDelphiAxDoc.Initialize;
- begin
- inherited Initialize;
- FItem := NewItem('&Change color', 0, False, True, DoMenuClick, 0, 'ColorItem');
- FSubItem := NewSubMenu('&Edit', 0, 'EditItem', [FItem]);
- Menu := NewMenu(Control, 'MainMenu', [FSubItem]);
- end;
-
- procedure TDelphiAxDoc.LoadFromStream(const Stream: IStream);
- var
- OS: TOleStream;
- begin
- OS := TOleStream.Create(Stream);
- try
- (Control as TMemo).Lines.SaveToStream(OS);
- finally
- OS.Free;
- end;
- end;
-
- procedure TDelphiAxDoc.SaveToStream(const Stream: IStream);
- var
- OS: TOleStream;
- Memo: TMemo;
- begin
- OS := TOleStream.Create(Stream);
- try
- Memo := Control as TMemo;
- Memo.Lines.LoadFromStream(OS);
- Memo.Modified := False;
- finally
- OS.Free;
- end;
- end;
-
- { TDelphiAxDoc.IPersistStreamInit }
-
- function TDelphiAxDoc.IsDirty: HResult;
- begin
- if (Control as TMemo).Modified then Result := S_OK
- else Result := S_FALSE;
- end;
-
- initialization
- TActiveXDocumentFactory.Create(ComServer, TDelphiAxDoc, TMemo,
- Class_DelphiAxDoc, 0, 131473, tmApartment, '', 8 {DOCMISC_NOFILESUPPORT});
- finalization
- end.
-